<?php

	
class Chofer extends Persona
{ 	
	var $id_chofer="";
	var $visible=1;
	
	function __construct()
	{
		parent::__construct("choferes");
		
		switch(func_num_args())
		{
			case 1:	$this->setId( func_get_arg( 0 ) );
					$this->cargar();
					break;
		}
	}
	
	/*Utilitarias*/
	
	/*
	 * Carga apartir de lainformacion  en la bd
	 */
	function cargar()
	{
		//cargar a la persona
		$this->cargarPersona();
		
		$r="select * from choferes c where c.id_chofer='".$this->getId()."'"; 
		$this->conexion->ejecutar($r);
		
		$this->conexion->traerFilaPorNombre();
		
		$this->setNivelAcceso($this->conexion->get("nivel_acceso"));
		$this->setPassword($this->conexion->get("password"));
		$this->setVisible($this->conexion->get("visible"));
		
		#cargar las sucursales
		$r="select id_sucursal from usuarios_sucursal where login_usuario='".$this->getId()."'";
		$this->conexion->ejecutar($r);
		while($this->conexion->traerFilaPorNombre())
		{
			$sucu=new Sucursal($this->conexion->get("id_sucursal"));
			$this->sucursales[$this->conexion->get("id_sucursal")]=$sucu->toObjeto();
		}
	}
	
	//agregar un usuario a la bd
	function insertar()
	{
		#agregar al usuario
		new Conexion("INSERT INTO usuarios VALUES ('".$this->getId()."','".$this->getNivelAcceso()."','".$this->getPassword()."',".$this->getVisible().")");
		
		#agregar a la persona
		$this->insertarPersona();
	}
	
	
	//checa si el usuario existen ya en la bd (el login almenos)
	function existe()
	{
		$con = new Conexion();
		$con->ejecutar("select * from usuarios where login='".$this->getId()."'");
		#consultar si ya existe ese login asignado
		if(!$con->vacio())
		#si hay filas
			return true;
		return false;	
	}
	
	
	function editarNivelAcceso($x){
		if($x != $this->getNivelAcceso()){
			$this->setNivelAcceso($x);
			ejecutar("UPDATE usuarios SET nivel_acceso='".$this->getNivelAcceso()."' where login='".$this->getId()."'");
		}
	}
	function editarPassword($x){
		if($x != $this->getPassword()){
			$this->setPassword($x);
			ejecutar("UPDATE usuarios SET password='".$this->getPassword()."' where login='".$this->getId()."'");
		}
	}
	function editarVisible($x){
		if($x != $this->getVisible()){
			$this->setVisible($x);
			ejecutar("UPDATE usuarios SET visible=".$this->getVisible()." where login='".$this->getId()."'");
		}
	}
	
	//eliminar un usuario a la bd
	function eliminar()
	{
		//la llave primaria esta vacia
		if($this->vacio())
			return false;

		#eliminar al usuario
		$this->editarVisible(0);
	}
	
	function agregarSucursal($idsucu){
		ejecutar("insert into usuarios_sucursal values ('".$this->getId()."','".$idsucu."');");
		$sucu=new Sucursal($idsucu);
		$this->sucursales[$idsucu]=$sucu->toObjeto();
	}
	
	function eliminarSucursal($idsucu=""){
		if(trim($idsucu) == "")
		{
			ejecutar("delete from usuarios_sucursal where login_usuario='".$this->getId()."';");
			unset($this->sucursales);
		}
		else
		{
			ejecutar("delete from usuarios_sucursal where login_usuario='".$this->getId()."' and id_sucursal='".$idsucu."';");
			unset($this->sucursales[$idsucu]);
		}
	}
	function tieneSucursal($_x)
	{
		foreach($this->sucursales as $val)
			if($_x == $val["id_sucursal"])
				return true;
		return false;
	}
	
	
	function toGrid()
	{
		$r="[
			'".$this->getId()."',
			'".$this->getNombre()."',
			'".$this->direccion->toString()."',
			'".$this->telefono->toString()."',
			'".$this->getNivelAcceso()."'
		]";
		return $r;
	}
	
	function toObjeto()
	{
		$o = array(
			"login"=> $this->getId(),
			"nombre"=> $this->getNombre(),
			"direccion"=> $this->direccion->toObjeto(),
			"telefono"=> $this->telefono->toObjeto(),
			"nivel_acceso"=> $this->getNivelAcceso(),
			"sucursales"=> $this->sucursales
		);

		return $o;
	}
	function toJson()
	{
		return json_encode($this->toObjeto());
	}
	function toForm()
	{
		$o = array(
			"success"=>true,
			"data"=>array(
				"txtLogin"=> $this->getId(),
				"txtNombre"=> $this->getNombre(),	
				"txtDireccion"=> $this->direccion->getDireccion(),
				"txtCiudad"=> $this->direccion->getCiudad(),
				"txtPassword"=> $this->getPassword(),
				"txtTelefono"=> $this->getTelefono(),
				"txtNivelAcceso"=> $this->getNivelAcceso()
			)
		);
		return json_encode($o);
	}
	
	function listarSelect()
	{
		$query= "select login from usuarios ";
		
		$this->conexion->ejecutar($query." order by login ;");
			
		$respuesta="{identifier:'abbreviation',
			items: [";
		
		$user=new Usuario();
		#le vamos concatenando a la respuesta cada opcion
		while($this->conexion->traerFilaPorNombre()) {
			$user->setId($this->conexion->get("login"));
			$user->cargar();
			$respuesta.= "{name:'".$user->getNombre()."',abbreviation:'".$user->getId()."'},";
			#echo $this->conexion->get("login")." - ";
	    }
		
		#si hay almenos una fila, nos queda una coma al final. Hay que quitarla
		if(!$this->conexion->vacio())
			$respuesta = substr($respuesta,0,strlen($respuesta)-1);
		
		$respuesta.= "]}";
		#imprimir el resultado
		return $respuesta;
		
	}
	
	
	function agregar()
	{
		$this->setId(trim($_POST['txtLoginU']));
		$this->setPassword(trim($_POST['txtPasswordU']));
		$this->setNombre(toHtml(trim($_POST['txtNombreU'])));
		$this->setDireccion(toHtml(trim($_POST['txtDireccionU'])),toHtml(trim($_POST['txtColoniaU'])),toHtml(trim($_POST['txtCiudadU'])),toHtml(trim($_POST['txtEstadoU'])),toHtml(trim($_POST['txtCpU'])));
		$this->setTelefono(trim($_POST['txtTelefonoCasaU']),trim($_POST['txtTelefonoTrabajoU']),trim($_POST['txtTelefonoCelularU']));
		$this->setNivelAcceso(trim($_POST['txtNivelAccesoU']));
		
		#consultar si ya existe ese login asignado
		if($this->existe())
		#si hay filas
		{
			return "{success: false, error:'El usuario ya existe. Pruebe con otro login.' }";
		}	
		
		#insertar al usuario
		$this->insertar();
		
		#insertar sucursales
		foreach($_POST as $nombre=> $valor)
			if(substr($nombre,0,4)=="cbU_" && $valor=="on")
			#insertar las sucursales que haya elejido
				$this->agregarSucursal( substr($nombre,4) );
				
		return "{success: true,datos:".$this->toGrid()."}";
	}
	
	//editar un usuario a la bd
	function editar()
	{
		$this->editarNombre(toHtml($_POST['txtNombreU']));
		$this->editarDireccion(toHtml($_POST['txtDireccionU']),toHtml($_POST['txtColoniaU']),toHtml($_POST['txtCiudadU']),toHtml($_POST['txtEstadoU']),toHtml($_POST['txtCpU']));
		$this->editarTelefono($_POST['txtTelefonoCasaU'],$_POST['txtTelefonoTrabajoU'],$_POST['txtTelefonoCelularU']);		
		$this->editarPassword($_POST['txtPasswordU']);
		
		if($this->getNivelAcceso() != "Administrador")
		{#si no es el admin
			$this->editarNivelAcceso($_POST['txtNivelAccesoU']);
			
			#borrar todas las que ya tenia y despues meter todas las que ya elejio
			$this->eliminarSucursal();
				
			#insertar sucursales
			foreach($_POST as $nombre=> $valor)
				if(substr($nombre,0,4)=="cbU_" && $valor=="on")
				#insertar las sucursales que haya elejido
					$this->agregarSucursal( substr($nombre,4) );
		}
		
		return "{success: true,datos:".$this->toGrid()."}";
	}
	
	function listarGrid($query,$pagina)
	{
		$query= (trim($query) != "") ? $query : "select login from usuarios ";
		$query=fromURL($query);#decodifica el query de la cadena que se pasa por URL
		
		$this->conexion->ejecutar($query." limit ".(($pagina-1)*PAGINA_CUANTOS).",".PAGINA_CUANTOS.";");
			
		$respuesta="[";
		
		$user=new Usuario();
		#le vamos concatenando a la respuesta cada opcion
		while($this->conexion->traerFilaPorNombre()) {
			$user->setId($this->conexion->get("login"));
			$user->cargar();
			$respuesta.= $user->toGrid().",";
			#echo $this->conexion->get("login")." - ";
	    }
		
		#si hay almenos una fila, nos queda una coma al final. Hay que quitarla
		if(!$this->conexion->vacio())
			$respuesta = substr($respuesta,0,strlen($respuesta)-1);
		
		$respuesta.= "]";
		#imprimir el resultado
		return $respuesta;		
	}
	
	
	
	/*funciones SET y GET*/
	
	#id persona
	function setId($_x){
		$this->login=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : $_x;
	}
	function getId(){
		return $this->login;
	}
	function setVisible($_x){
		$this->visible=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : $_x;
	}
	function getVisible(){
		return $this->visible;
	}
}
?>
